// function newTest(text) {
//   $('#initia').html(
//     $('#initia').html() + `<div>webload的测试:${text}</div>`
//   )
// }

/**
 * 传参约定
 * @param  object
 * @param picker 文件选择的元素id名或class名
 * @param ctlBtn  文件上传按钮class或id
 * @param deletBtn  文件删除按钮class或id
 * @param deleteFile  文件删除回调
 * @param thelistContent 文件选择完后的回调函数
 * @param progressLi  进度条的id名
 * @param chunkSize  字节大小
 * @param md5Url  md5接口地址
 * @param appId  appId
 * @param server 文件接收服务端
 * @param uploadFile() 点击上传文件的回调函数
 * @param md5Error(data) 接受md5的错误信息
 * @param uploaderSuccess(status,text,fileId,response) 上传返回结果回调函数 status 0 发生错误 1 上传成功 2已有文件 text:上传信息 fileId,response
 * @param uploaderError 上传失败
 * @param object.mimeTypes 限制上传类型 ,分割  video/*,image/* 不限制则不传,
 * @param multiple 是否多选 boolean ，默认关闭
 */

function webUploaderBegin(object) {
  var self = object.self
  var $btn = $(object.ctlBtn)
  var md5Error = object.md5Error ? object.md5Error : function() {}
  var uploaderSuccess = object.uploaderSuccess ? object.uploaderSuccess : function() {}
  var uploaderError = object.uploaderError ? object.uploaderError : function() {}
  var thelistContent = object.thelistContent ? object.thelistContent : function() {}
  var deleteFile = object.deleteFile ? object.deleteFile : function() {}
  // HOOK 这个必须要再uploader实例化前面
  WebUploader.Uploader.register(
    {
      'before-send-file': 'beforeSendFile',
      'before-send': 'beforeSend'
    },
    {
      beforeSendFile: function(file) {
        // console.log("beforeSendFile");
        // Deferred对象在钩子回掉函数中经常要用到，用来处理需要等待的异步操作。
        console.log(file)
        var task = new $.Deferred()
        // 根据文件内容来查询MD5
        uploader
          .md5File(file)
          .progress(function(percentage) {
            // 及时显示进度
            // console.log('计算md5进度:', percentage)
            self.status = {
              color: '#c7254e',
              text: '正在计算文件大小，请等待'
            }
            getProgressBar(file, 0.05, file.id, file.name)
          })
          .then(function(val) {
            // 完成
            console.log('md5 result:', val)
            file.md5 = val
            // 进行md5判断
            $.post(object.md5Url, { appId: object.appId, md5: file.md5 }, function(data) {
              //console.log(data.data);
              if (data.header.retCode == '000000') {
                var status = data.body.data.code
                task.resolve()
                if (status == 404) {
                  // 文件不存在，那就正常流程
                } else if (status == 200) {
                  // 忽略上传过程，直接标识上传成功；
                  uploader.skipFile(file)
                  file.pass = true
                  file.path = data.body.data.path
                  file.fileId = data.body.data.fileId
                } else if (status == 206) {
                  // 部分已经上传到服务器了，但是差几个模块。
                  file.missChunks = data.body.data.missChunks
                }
              } else {
                // 错误信息
                md5Error(data)
              }
            })
          })
        return $.when(task)
      },
      beforeSend: function(block) {
        var task = new $.Deferred()
        var file = block.file
        var missChunks = file.missChunks
        var blockChunk = block.chunk
        // console.log('当前分块号：' + blockChunk)
        if (missChunks !== null && missChunks !== undefined && missChunks !== '') {
          console.log('还没上传的分片号有:' + missChunks)
          var flag = true
          for (var i = 0; i < missChunks.length; i++) {
            if (blockChunk == missChunks[i]) {
              // console.log(file.name + '->分块号：' + blockChunk + ':还没上传，现在继续上传。')
              flag = false
              break
            }
          }
          if (flag) {
            task.reject()
          } else {
            task.resolve()
          }
        } else {
          task.resolve()
        }
        return $.when(task)
      }
    }
  )

  // 实例化
  var uploader = WebUploader.create({
    pick: {
      id: object.picker,
      label: '上传文件',
      multiple: !!object.multiple
    },
    accept: {
      title: 'Video',
      mimeTypes: object.mimeTypes ? object.mimeTypes : ''
    },
    formData: {
      md5: '',
      chunkSize: object.chunkSize,
      appId: object.appId
    },
    //dnd: '#dndArea',
    //paste: '#uploader',
    swf: './Uploader.swf',
    chunked: true,
    chunkSize: object.chunkSize, // 字节 2M分块
    threads: 5,
    server: object.server,
    auto: true,

    // 禁掉全局的拖拽功能。这样不会出现图片拖进页面的时候，把图片打开。
    disableGlobalDnd: true,
    fileNumLimit: 1,
    fileSizeLimit: 50 * 1024 * 1024 * 1024, // 200 M
    fileSingleSizeLimit: 50 * 1024 * 1024 * 1024 // 50 M
  })

  // 当有文件被添加进队列的时候
  uploader.on('beforeFileQueued', function(file) {
    console.log(file)
    if (self.uploaderList.length !== 0) {
      alert('请删除已上传的视频后添加')
      return false
    }
    return true
  })
  // 当有文件被添加进队列的时候
  uploader.on('fileQueued', function(file) {
    //  console.log("fileQueued");
    thelistContent(file)
    console.log('#'+file.id+object.deletBtn)
    $('#'+file.id+'-'+object.deletBtn).on('click', function() {
      uploader.removeFile( file );
      deleteFile(file)
      // uploader.reset()
    })

  })

  //当某个文件的分块在发送前触发，主要用来询问是否要添加附带参数，大文件在开起分片上传的前提下此事件可能会触发多次。
  uploader.onUploadBeforeSend = function(obj, data) {
    //  console.log("onUploadBeforeSend");
    var file = obj.file
    data.md5 = file.md5 || ''
    data.appId = object.appId
  }
  // 上传中
  uploader.on('uploadProgress', function(file, percentage) {
    if (self.status.text !== '正在上传，请等待...')
      self.status = {
        text: '正在上传，请等待...',
        color: 'rgba(21, 87, 255, 1))'
      }
    getProgressBar(file, percentage, file.id, '上传进度')
  })
  // 上传返回结果
  uploader.on('uploadSuccess', function(file, response) {
    var text = ''
    var path = ''
    if (file.pass) {
      text = '文件秒传功能，文件已上传。'
      status = 2
      path = file.path
    } else {
      console.log('------返回结果-----')
      console.log(response)
      var body = response.body
      if (response.header.retCode == '000000' && response.body.data.uploadComplete == true) {
        text = '已上传'
        status = 1
        path = body.data.path
      } else {
        status = 0
        text = response.header.retMsg
      }
    }
    uploaderSuccess(status, text, response ? response.body.data.fileId : file.fileId, file)
  })
  uploader.on('uploadError', function(file) {
    console.log('上传出错')
    uploaderError()
  })
  uploader.on('uploadComplete', function(file) {
    //清空队列
    uploader.reset()
  })
  // 文件上传
  $btn.on('click', function() {
    console.log('上传...')
    self.loading = true
    uploader.upload()
  })
  //文件删除
  $(object.deletBtn).on('click', function() {
    console.log(this)
    deleteFile()
    uploader.reset()
  })
  /**
   *  生成进度条封装方法
   * @param file 文件
   * @param percentage 进度值
   * @param id_Prefix id前缀
   * @param titleName 标题名
   */
  function getProgressBar(file, percentage, id_Prefix, titleName) {
    console.log(id_Prefix, titleName)
    console.log(percentage)
    if (percentage === 1) {
      percentage = 0.95
      $(`#${id_Prefix}-progressbar`).next().show()
    }
    const a = percentage.toFixed(2) * 100
    console.log('-----')
    console.log(a)
    $(`#${id_Prefix}-progressbar`).css('width', a+ '%')

    self.percentage = a
  }

  /**
   * 隐藏进度条
   * @param file 文件对象
   * @param id_Prefix id前缀
   */
  function fadeOutProgress(file, id_Prefix) {
    $(object.progressLi)
      .find('#' + id_Prefix + '-progress')
      .fadeOut()
  }

  // $(object.picker).click(function() {
  //   uploader.reset()
  //   $('.progress progress-striped active').fadeOut()
  // })
}
